區塊加密是目前蠻主流的加密。
區塊加密跟串流加密其實就是差距蠻大的,有一個特點是區塊加密的優勢。
那就是『模式』,為何那麼說?區塊加密提供的是模式。
因為提供的是模式的關係,將『加密』跟『加密模式』分開來。
加密法可以不同、可以替換,而加密模式就能處理更多的資料。
加密法提供了固定的資料加密,加密模式提供了怎麼罷資料分割跟串連。
接下來會將幾個知名的介紹介紹,之後會提幾個有專利的。
但同時也很優秀的區塊加密方法。
那我們就開始來聊聊~
在開始介紹工作模式之前必需要介紹幾個東西。
這兩個是十分重要的,我們先把這兩個簡單的講完。
接著才進入工作模式的介紹。
VI全名為『Initialization Vector』,中文為初始化向量。
主要是提供加密方法時的亂數化,使得相同的『金鑰』跟『資料』加密出來的資料串卻是不同。
這樣就能使同樣加密的資料產生不同的密文,避免了每一次重新生成金鑰的過程。
通常VI無須保密,主要是提供每一次加密的混亂化,同一支金鑰對不同或相同的資料加密時,一定要有不同的VI。
接下來我提供一些WiKi的資訊:
對於CBC和CFB,重用IV會導致泄露明文首個塊的某些資訊,亦包括兩個不同訊息中相同的字首。
對於OFB和CTR而言,重用IV會導致完全失去安全性。
另外,在CBC模式中,IV在加密時必須是無法預測的。
在許多實現中使用的產生IV的方法。
例如SSL2.0使用的,即採用上一個訊息的最後一塊密文作為下一個訊息的IV,是不安全的。
上述來自區塊加密法工作模式。
一般VI會串在加密後資料的最前面。
我們之前在說加密時一直都沒有提到,但在Hash中由提到的填充。
於在這裡出現了,想必大家多多少少有意識到這件事情了吧?
沒錯填充是屬於工作模式的範疇了。
加密演算通常都必需要固定的大小才能加密,而在工作模式中的衝就會來處理這喔部分。
主要是ECB和CBC需要最後一塊在加密前進行填充,其他模式有些不一樣後面再說。
填充比較簡單方式就是在資料後面填入加密區塊為倍數的空字元,但一樣必需要確保資料還原時長度要正確(有些資料真的後面會是空字元好幾個,避免混淆)。
還有期他比較複雜的填充方式,但那就是看大家怎麼設計了。
有類似於DES的添加1位元'1'後補'0'到長度符合,還有WiKi介紹的:
布魯斯·施奈爾和尼爾斯·弗格森提出了兩種簡單的可能性:
1. 添加一個值為128的位元組(十六進位的80),再以0位元組填滿最後一個塊。
2. 或向最後一個塊填充n個值均為n的位元組。
上述來自區塊加密法工作模式。
我們正式來聊經點的幾個工作模式吧~
首先是跟資料有關西的,對資料直接接加密的EBC跟CBC。
以下圖片都來自區塊加密法工作模式在此注記。
電子密碼本 - Electronic codebook(ECB)
這個應該是最簡單的工作模式,先看圖一
圖一
恩……其實就是把資料先切塊,然後把切塊的『個別』加密,圖二是解碼
圖二
其實也就是同樣個別解碼。
這個方式的好處就是能並行處理,因為每一個加解密都是獨立的,能做並行加密跟解密。
但問題也很多,看一下圖三:
圖三
我們對圖三做ECB區塊加密使用的加密是AES來加密後得到圖四:
圖四
大家應該知道這種加密方式的缺點吧……
不如說缺點還蠻多的,不只重複使用金鑰,並沒有利用到VI。
因此!同一個金鑰、資料會使結果一樣。
所以我們接下來看CBC吧~
密碼區塊連結 - Cipher-block chaining(CBC)
先看一下圖五:
圖五
以CBC來說能看到VI先跟資料作XOR然後加密。
加密完後再把結果輸出同時把這資料當成新的VI在跟下一塊的資料作XOR。
這邊先跟大家說一下,我們會先把資料切塊成跟加密算法符合的長度喔。
圖六就是解碼:
圖六
缺點也很簡單,就是只要一位元的資料錯誤後,後續相連的資料都會發生錯誤。
這邊介紹了兩個最為基礎的加密區塊工作模式,下一章將會介紹一些比較特別的加密區塊模式。
而這兩個簡單的模式都能做並行,而安全性來說CBC大於EBC但依然不是最安全的。
接下來將會介紹幾個更加有趣的工作模式。
而最後在跟大家討論總結論跟優缺點,以及我推薦的加密工作模式。
那麼大家明天見拉~
如何選擇AES加密模式( CBC ECB CTR OCB CFB ) ?